﻿using BO;
using JMI_Nucleo.Classe;
using JMI_Nucleo.JMIProvider;
using Microsoft.VisualBasic;
using OR;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ControleUsuario
{
    public partial class FrmUsuario : JMI_Nucleo.View.Form_Base.FrmBaseCadastro002
    {
        private mUsuario _mUsuario = null;
        private Usuario usuario = null;
        private Funcionario funcionario = null;
          
        public FrmUsuario()
        {
            InitializeComponent();
        }

        private void FrmUsuario_Load(object sender, EventArgs e)
        {
            usuario = new Usuario();
            CarregaGrade();
            TxtNome.Focus();
        }

        protected override void Incluir()
        {
            base.Incluir();

            _mUsuario = new mUsuario();
            _mUsuario.Codigo = 0;

            #region Carrega lista 
            List<string> lstTemp = new List<string>();
            CboFuncionario.Items.Clear();
            funcionario = new Funcionario();

            lstTemp = funcionario.GetListaNome(Empresa.XMLEmpresa.GetCodigoEmpresa());
            if (lstTemp.Count > 0)
                lstTemp.ForEach(p => CboFuncionario.Items.Add(p));
            #endregion
            TxtNome.Focus();
        }

        protected override void Alterar()
        {
            base.Alterar();
            _mUsuario.DataAlteracao = DateTime.Today;
        }

        protected override void Excluir()
        {
            base.Excluir();
        }

        private void PopulaPropriedade()
        {
          
            if (Acao == 'A') 
            { 
                _mUsuario.Codigo = Convert.ToInt16(TxtCodigo.Text);
                _mUsuario.DataAlteracao = DateTime.Today;
            }
            _mUsuario.Nome = TxtNome.Text;
            _mUsuario.Senha = TxtSenha.Text;
            _mUsuario.DataCadastro = dtpDataCadastro.Value;
            _mUsuario.Ativo = ChkAtivo.Checked;
            _mUsuario.Administrador = ChkAdministrador.Checked;
            _mUsuario.Super = ChkSuperUsuario.Checked;
            _mUsuario.CodigoEmpresa = Empresa.XMLEmpresa.GetCodigoEmpresa();
            funcionario = new Funcionario();

            _mUsuario.Funcionario.Codigo = funcionario.GetCodigo(CboFuncionario.Text);          
        }

        private void PopulaComponente(mUsuario obj)
        {
            JMIUtil objUtil = new JMIUtil();
            TxtCodigo.Text = obj.Codigo.ToString();
            TxtNome.Text = obj.Nome;
            TxtSenha.Text = obj.Senha;
            dtpDataCadastro.Value = obj.DataCadastro;
            ChkAtivo.Checked = obj.Ativo;
            ChkAdministrador.Checked = obj.Administrador;
            ChkSuperUsuario.Checked = obj.Super;
            TxtDataAlteracao.Text = objUtil.AjustaDataAlteracao(obj.DataAlteracao);
            funcionario = new Funcionario();
            CboFuncionario.Text = funcionario.GetNome(obj.CodigoEmpresa);
        }

        protected override void Salvar(bool sucesso = true)
        {
            base.Salvar(sucesso);

            TxtStatus.Text = String.Empty;
            TxtStatus.Update();

            TrocaIconeAviso(1);
            PopulaPropriedade();
            sucesso = usuario.Salvar(_mUsuario, Acao, _mUsuario.Codigo, _mUsuario.CodigoEmpresa);
            if (sucesso)
            {
                base.MudaControleRecursivo(this.Controls, 2);
                base.Limpar(this.Controls);
                TxtStatus.Text = "Dados gravados com sucesso ...";
                base.Salvar();
                CarregaGrade();
            }
            else
            {
                if (!String.IsNullOrEmpty(usuario.MsgErro))
                {
                    TrocaIconeAviso(2);
                    TxtStatus.Text = usuario.MsgErro;
                }
                base.Salvar(false);
                base.MudaControleRecursivo(this.Controls, 1);
                TxtNome.Focus();
            }            
        }

        protected override void Confirmar(bool sucesso = true)
        {
            base.Confirmar(sucesso);

            sucesso = usuario.Excluir(_mUsuario.Codigo, _mUsuario.CodigoEmpresa);
            if (sucesso)
            {
                // Criar metodo para validar o usuário
                // se estiver vinculado a alguma tabela do sistema
                // Não pode mais excluir somente desativar
                base.MudaControleRecursivo(this.Controls, 2);
                base.Limpar(this.Controls);
                TxtStatus.Text = "Dados excluidos com sucesso ...";
                CarregaGrade();
            }
        }

        private void ChkAdministrador_CheckedChanged(object sender, EventArgs e)
        {
            if (ChkAdministrador.CheckState == CheckState.Checked)
            {
                label2.Enabled = false;
                CboFuncionario.Enabled = false;
            }
            else if (ChkAdministrador.CheckState == CheckState.Unchecked)
            {
                label2.Enabled = true;
                CboFuncionario.Enabled = true;
            }
        }

        private void CarregaGrade()
        {
            List<mUsuario> lst = usuario.GetLista(Empresa.XMLEmpresa.GetCodigoEmpresa());
            if (lst != null && lst.Count > 0)
            {
                dgvUsuario.DataSource = lst;
                dgvUsuario.Refresh();
            }
        }        

        protected override void Pesquisar()
        {
            base.Pesquisar();

            string retorno = Interaction.InputBox("Informe o código para pesquisa", "Pesquisa por Código");

            if (!String.IsNullOrEmpty(retorno))
            {
                _mUsuario = usuario.GetUsuario(Convert.ToInt32(retorno), Empresa.XMLEmpresa.GetCodigoEmpresa());
                if (_mUsuario != null)
                {
                    PopulaComponente(_mUsuario);
                    base.Pesquisar();
                }
            }
        }
    }
}
